﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MIAP.Entidades
{
    /// <summary>
    /// Entidad que encapsula el resumen de la información de un usuario de la aplicación.
    /// </summary>
    [Serializable]
    public class UsuarioInfo
    {
        /// <summary>
        /// Almacena el nombre completo del usuario.
        /// </summary>
        private string nombreCompleto = string.Empty;

        /// <summary>
        /// Obtiene o establece el identificador unico del usuario del sistema.
        /// </summary>
        public int IdUsuario { get; set; }

        /// <summary>
        /// Obtiene o establece el identificador del usuario en las tablas de manejo de usuarios
        /// </summary>
        public int IdentificadorPortal { get; set; }

        /// <summary>
        /// Obtiene o establece el identificador del proyecto.
        /// </summary>
        public int? IdProyecto { get; set; }

        /// <summary>
        /// Obtiene o establece el id del perfil del usuario.
        /// </summary>
        public int IdPerfil { get; set; }

        /// <summary>
        /// Obtiene o establece el nombre unico del usuario.
        /// </summary>
        public string AliasUsuario { get; set; }

        /// <summary>
        /// Obtiene o establece el nombre del usuario
        /// </summary>
        public string NombreUsuario { get; set; }

        /// <summary>
        /// Obtiene o establece el apellido paterno del usuario
        /// </summary>
        public string ApellidoPaterno { get; set; }

        /// <summary>
        /// Obtene o establece el apellido materno del usuario
        /// </summary>
        public string ApellidoMaterno { get; set; }

        /// <summary>
        /// Obtiene o establece el area a la que esta asignado el usuario
        /// </summary>
        public string Area { get; set; }

        /// <summary>
        /// Obtiene o establece el subarea a la que esta asignado el usuario
        /// </summary>
        public string SubArea { get; set; }

        /// <summary>
        /// Obtiene o establece la dirección del correo electrónico.
        /// </summary>
        public string DireccionCorreo { get; set; }

        /// <summary>
        /// Obtiene o establece el nombre del proyecto.
        /// </summary>
        public string Proyecto { get; set; }

        /// <summary>
        /// Obtiene o establece si el usuario esta activo.
        /// </summary>
        public bool? EstaActivo { get; set; }

        /// <summary>
        /// Obtiene o establece el estaus del usuario.
        /// </summary>
        public string Estatus { get; set; }

        /// <summary>
        /// Obtiene o establece el permiso para poder ejecutar el proyecto.
        /// </summary>
        public bool? PuedeEjecutarProyecto { get; set; }

        /// <summary>
        /// Obtiene el nombre completo del usuario.
        /// </summary>
        public string NombreCompleto
        {
            get
            {
                this.GetFullName();
                return this.nombreCompleto;
            }
            set
            {
                this.nombreCompleto = value;
            }
        }
        /// <summary>
        /// regresa el alias-Nombre completo del usuarios
        /// </summary>
        public string Clave_Usuario 
        {
            get { return AliasUsuario + " - " + NombreCompleto; }
        }

        /// <summary>
        /// Obtiene o establece la fecha de registro.
        /// </summary>
        public string FechaRegistro { get; set; }

        /// <summary>
        /// Concatena en una cadena los nombres de y apellidos de un usuario.
        /// </summary>
        /// <returns>Cadena que contiene el nombre completo del usuario.</returns>
        public void GetFullName()
        {
            StringBuilder nombreCompleto = new StringBuilder();
            nombreCompleto.Append(this.NombreUsuario);
            nombreCompleto.Append(" ");
            nombreCompleto.Append(this.ApellidoPaterno);
            nombreCompleto.Append(" ");
            nombreCompleto.Append(this.ApellidoMaterno);

            this.nombreCompleto = nombreCompleto.ToString();
        }

        /// <summary>
        /// Obtiene o establece la propiedad si es seleccionado o no en algun grid.
        /// </summary>
        public bool IsChecked { get; set; }

        public UsuarioInfo()
        {
        }

        public UsuarioInfo(UsuarioInfo usuario)
        {
            this.IdUsuario = usuario.IdUsuario;
            this.IdPerfil = usuario.IdPerfil;
            this.IdProyecto = usuario.IdProyecto;
            this.IdentificadorPortal = usuario.IdentificadorPortal;
            this.IsChecked = usuario.IsChecked;
            this.NombreUsuario = usuario.NombreUsuario;
            this.Proyecto = usuario.Proyecto;
            this.PuedeEjecutarProyecto = usuario.PuedeEjecutarProyecto;
            this.SubArea = usuario.SubArea;
            this.Area = usuario.Area;
            this.ApellidoMaterno = usuario.ApellidoMaterno;
            this.ApellidoPaterno = usuario.ApellidoPaterno;
            this.EstaActivo = usuario.EstaActivo;
            this.Estatus = usuario.Estatus;
            this.FechaRegistro = usuario.FechaRegistro;
            this.DireccionCorreo = usuario.DireccionCorreo;
        }
    }
}
